#ifndef __APP_POOL_H
#define __APP_POOL_H
#include <pthread.h>
// 定义任务结构体，用于存储任务函数和相关参数
typedef struct 
{
    int (*task_func)(void *arg);  // 任务函数指针，指向任务执行的函数
    void *arg;                    // 任务的参数，可以是任何类型的数据
} app_task_t;

/**
 * @brief 初始化任务池，创建指定数量的线程。
 *
 * @param thread_num 线程池中线程的数量。
 * @return int 初始化成功返回0，失败返回负数。
 */
int app_pool_init(int num);

/**
 * @brief 销毁任务池，释放资源并停止所有线程。
 *
 * 该函数会等待所有线程完成当前任务后退出，释放分配的资源。
 */
void app_pool_destroy();

/**
 * @brief 向任务池中注册一个任务。
 *
 * 将任务函数和任务参数添加到任务池中，任务池将调度线程来执行该任务。
 * 
 * @param task_func 任务函数，指向任务的执行函数。
 * @param arg 任务的参数，可以是任意类型的数据。
 * @return int 注册成功返回0，失败返回负数。
 */
int app_pool_registerTask(int (*task_func)(void *arg), void *arg);

#endif // __APP_POOL_H
